package com.eshop.eshopmanagersystem.dal;

import com.eshop.eshopmanagersystem.idal.IBarcodeDAL;
import com.eshop.eshopmanagersystem.model.BarcodeInfo;
import com.eshop.eshopmanagersystem.model.OrderBarcodesRelationshipInfo;
import com.eshop.eshopmanagersystem.model.OrderInfo;
import com.eshop.eshopmanagersystem.unti.OrderData;
import org.apache.commons.lang.RandomStringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * 数据实现层
 * 查询产品数据
 */

@Service
public class BarcodeDAL {

    @Autowired
    IBarcodeDAL ibdal;

    /**
     * 根据条形码数值查询指定商品
     */
    public BarcodeInfo getProductByBarcode(BarcodeInfo barcode){
        System.out.println("执行查询");
        return ibdal.getProductByBarcode(barcode);
    }

    /**
     * postData: OrderData(orderList=[OrderBarcodesRelationshipInfo(ob_id=null, order_id=null, id=1045512, price=2.20, count=3)], sum=3, total_price=6.6)
     * 生成订单，插入数据
     * @Param 前端提交的订单数据信息（List<产品> , user_id,sum,total_price）
     *
     * return 是否添加成功
     */
    public boolean addOrder(OrderData orderData){
        //统一返回字段，默认false，如果都执行成功返回true
        boolean isdone = false;

        OrderInfo orderInfo =new OrderInfo();
        //生成订单主表
        String order_code = makeOrderCode();  //生成订单编号
        orderInfo.setUser_id(orderData.getUser_id()); //添加订单的用户（客户端id）
        orderInfo.setOrder_code(order_code);  //添加订单编号
        orderInfo.setOrder_pay("Java5班在线支付平台"); //添加收单机构
        orderInfo.setSum(orderData.getSum());  //添加订单商品总数
        orderInfo.setTotal_price(orderData.getTotal_price()); //添加订单总价格
        Integer counts = ibdal.addOrder(orderInfo); //执行订单主表插入
        Integer order_id = orderInfo.getOrder_id(); //获取新订单的id
        if(counts>0){ //如果返回order_id为空则订单表插入失败
            isdone = true;
        }else{
            isdone = false;
        }
        List<OrderBarcodesRelationshipInfo> obrsList = orderData.getOrderList();
        //根据List<产品> 循环插入关系表
        for(int i=0;i<obrsList.size();i++){
            //订单产品关系数据格式：orderList=[OrderBarcodesRelationshipInfo(ob_id=null, order_id=null, id=1045512, price=2.20, count=3)]
            //实例化关系表，准备添加对象数据
            OrderBarcodesRelationshipInfo obrs = new OrderBarcodesRelationshipInfo();
            obrs.setOrder_id(order_id);
            obrs.setId(obrsList.get(i).getId()); //从obrsList集合中取get(角标)：当前行，取数据列赋值
            obrs.setPrice(obrsList.get(i).getPrice());
            obrs.setCount(obrsList.get(i).getCount());
            //插入关系数据表
            if(ibdal.addOrderAndBarcodesRelation(obrs)>0){
                isdone = true;
            }else {
                return false;
            }
        }
        return isdone;
    }

    /**
     * 生成订单与产品关系表
     * 插入数据
     */
    public boolean addOrderAndBarcodesRelation(OrderBarcodesRelationshipInfo obrs){
        if(ibdal.addOrderAndBarcodesRelation(obrs)>0){
            return true;
        }
        return false;
    }

    /**
     * 封装方法：生成订单流水编号规则
     */
    public static String makeOrderCode(){
        //使用SimpleDateFormat设置一个时间显示格式
        SimpleDateFormat dmDate = new SimpleDateFormat("yyyyMMdd");
        //获取当前时间
        Date date = new Date();
        //使用刚设置好的时间格式对当前时间进行格式化
        String dateStr = dmDate.format(date);

        String randomCount = RandomStringUtils.randomNumeric(22);

        return dateStr+randomCount;
    }
}
